<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>单例模式</title>
</head>

<body>
    <script>
        /* 数学工具类 */
        class MathTool {

            /* 获得[a,b]区间内的随机数  mt.getRandom(1,10)*/
            getRandom(a,b){
                return a + Math.round((b-a)*Math.random())
            }

            /* 获得随机颜色  mt.getRandomColor()*/
            getRandomColor(){
                return `rgb(${this.getRandom(0,255)},${this.getRandom(0,255)},${this.getRandom(0,255)})`
            }

            /* 获得arr中的一个随机元素  mt.getRandomItem(arr) */
            getRandomItem(arr){
                return arr[this.getRandom(0,arr.length-1)]
            }

            /* 
            单例模式：MathTool类只有一个单例 
            singleton单例 instance实例
            MathTool.getSingleton()
            */
            static getSingleton(){
                // console.log("getSingleton:this",this);

                // 如果当前类身上并不存在singleton
                if(!this.singleton){
                    // 造一个MathTool实例赋值给它
                    console.log("创建一个MathTool实例");
                    this.singleton = new MathTool()
                }
                
                return this.singleton
            }

        }
    </script>

    <!-- 没有使用单例模式 无度地创建了海量的MathTool实例 -->
    <!-- <script>
        /* 为了获得随机数造了一个实例mt1 */
        let mt1 = new MathTool()
        console.log(mt1.getRandom(1,10));
        mt1 = null//释放内存

        /* 为了获得随机颜色造了一个实例mt2 */
        let mt2 = new MathTool()
        console.log(mt2.getRandomColor());
        mt2 = null//释放内存

        /* 为了到数组中摘取随机颜色 */
        let mt3 = new MathTool()
        console.log(mt3.getRandomItem([1,2,3]));
        mt3 = null//释放内存
    </script> -->

    <script>
        console.log(
            MathTool.getSingleton().getRandom(1,10)
        );
        console.log(
            MathTool.getSingleton().getRandomColor()
        );
        console.log(
            MathTool.getSingleton().getRandomItem([1,2,3])
        );
    </script>
</body>

</html>